package com.tbit.main.service;

import com.tbit.main.pojo.*;

import java.util.List;
import java.util.Map;

/**
 * 设备管理
 *
 * @author Leon
 * 2019年11月11日 下午2:49:27
 */
public interface MachineManagerService {

    /**
     * 查询所有
     *
     * @param accountId
     * @return
     */
    List<MachineStatusBorrow> getAll(AccountUser accountUserToken,Integer accountId, Integer mapType, List<Integer> regionId);

    List<Integer> selectSuperviseMachine(Integer roleId, Integer accountId);

    /**
     * 根据电量查询
     *
     * @param accountId
     * @param soc
     * @return
     */
    List<MachineStatus> getByPower(AccountUser accountUserToken,Integer accountId, Integer soc, Integer mapType, List<Integer> regionId, Integer startSoc, Integer endSoc);

    /**
     * 根据machineId查询
     *
     * @param accountId
     * @param machineIdList
     * @param mapType
     * @return
     */
    List<MachineStatus> getByMachineId(Integer accountId, List<Integer> machineIdList, Integer mapType);

    /**
     * 根据闲置时间查询
     *
     * @param accountId
     * @param hours
     * @return
     */
    List<MachineStatusBorrow> getByUnuse(AccountUser accountUserToken,Integer accountId, Integer hours, Integer mapType, List<Integer> regionId, Integer start, Integer end);

    /**
     * 查询故障车辆
     *
     * @param accountId
     * @param mapType
     * @return
     */
    List<MachineStatusFault> getByFault(AccountUser accountUserToken,Integer accountId, Integer mapType, List<Integer> faultState, List<Integer> regionId);

    /**
     * 查询异常车辆
     *
     * @param accountId
     * @param abnormalType
     * @return
     */
    List<MachineStatusAbnormal> getByAbnormal(AccountUser accountUserToken,Integer accountId, Integer abnormalType, Integer mapType, List<Integer> regionId, Integer hours);

    List<MachineStatusAbnormal> getByAbnormalList(Integer accountId, List<Integer> abnormalType, Integer mapType, List<Integer> regionId);

    /**
     * 查询占用中
     *
     * @param accountId
     * @param mapType
     * @return
     */
    List<MachineStatus> getByOccupy(AccountUser accountUserToken,Integer accountId, Integer mapType, List<Integer> regionId);

    /**
     * 查询骑行中
     *
     * @param accountId
     * @param mapType
     * @return
     */
    List<MachineStatus> getByUseIng(AccountUser accountUserToken,Integer accountId, Integer mapType, List<Integer> regionId);

    /**
     * 查询骑行中
     *
     * @param accountId
     * @param mapType
     * @return
     */
    List<MachineStatus> getAbnormalReturn(AccountUser accountUser,Integer accountId, Integer mapType, List<Integer> regionId, Integer type);

    /**
     * 查询流动车辆
     *
     * @param accountId
     * @param regionId
     * @param mapType
     * @return
     */
    List<MachineStatus> getByStream(AccountUser accountUserToken,Integer accountId, List<Integer> regionId, Integer mapType);

    /**
     * 根据区域和类型查询
     *
     * @param accountId
     * @param abnormalType
     * @return
     */
    List<MachineStatusAbnormal> getAbnormalType(Integer accountId, List<Integer> abnormalType);

    /**
     * 查询无盈利车辆
     *
     * @param accountId
     * @return
     */
    List<MachineStatusBorrow> getNoIncome(AccountUser accountUser,Integer accountId, Integer mapType, List<Integer> regionId, Integer count);

    /**
     * 查询扣押车辆
     *
     * @param accountId
     * @param mapType
     * @return
     */
    List<MachineStatus> getByDetention(Integer accountId, Integer mapType, List<Integer> regionId);

    /**
     * 查询入库车辆
     *
     * @param accountId
     * @param mapType
     * @return
     */
    List<MachineStatus> getByStock(Integer accountId, Integer mapType, List<Integer> regionId);

    List<MachineStatusAbnormal> getAbnormalTypeDel(List<MachineStatusAbnormal> machineStatusAbnormals, Integer accountId, List<Integer> regionId);

    List<MachineAbnormal> getAbnormalTypeDelMachineAbnormal(List<MachineAbnormal> machineStatusAbnormals, Integer accountId, List<Integer> regionId);

    Integer transfanType(Integer abnormalType);

    void pushPost(String userCodeS, Double lon, Double lat, Double lonPeople, Double latPeople, Integer mapType);

    //根据自定义标签查询
    List<MachineStatusBorrow> getByTag(AccountUser accountUserToken,Integer accountId, Integer mapType, List<Integer> regionId, List<Integer> tagIds);

    /**
     * 无定位
     */
    List<MachineStatus> getLongTermNonPos(Integer accountId, List<Integer> regionId, Integer mapType, Integer hours);

    /**
     * 长时订单
     */
    List<MachineStatus> getLongOrder(Integer accountId, List<Integer> regionId, Integer mapType, Integer hours);

    /**
     * 无订单
     * @param accountId 区域id
     * @param hours     小时
     * @param mapType   地图类型
     * @param regionId  分区id
     * @return  Result<List<MachineStatus>>
     */
    List<MachineStatus> getNoOrder(Integer accountId, Integer hours, Integer mapType, String regionId);

    /**
     * 长时订单时长
     * @param machineIdList 设备id
     * @param accountId 区域id
     * @return Result<Map<Integer, String>>
     */
    Map<Integer, String> getLongOrderTime(List<Integer> machineIdList, Integer accountId);
}
